package methodref02;

import org.junit.Test;

import java.util.function.BiPredicate;
import java.util.function.Function;

/**
 * 特殊的非静态方法的引用
 *  格式:
 *    类名::非静态方法名
 *    1.不再适用于方法引用的前提条件
 *    2.当Lambda表达式的第一个参数,作为实例(非静态)方法的调用者,第二个参数作为实例方法的参数,可以使用类名::非静态方法名
 *    3.当Lambda表达式的参数作为一个空参实例方法的调用者时候,也可以使用类名::非静态方法名
 */
public class MethodRefDemo05 {
	@Test
	public void test01() {
		Person p1 = new Person("老王");
		Person p2 = new Person("老李");
		//BiPredicate<Person, Person> bp = (person1, person2) -> person1.equals(person2);
		BiPredicate<Person, Person> bp = Person::equals;
		System.out.println(bp.test(p1, p2));
	}

	@Test
	public void test02() {
		Person p1 = new Person("老王");
		//Function<Person, String> f = person -> person.getName();
		Function<Person, String> f = Person::getName;
		System.out.println(f.apply(p1));
	}

}
